/**
 * @created by helin3 2017-11-30
 * @updated by helin3 2018-01-17 代码按规范调整
 * @description 系统相关功能请求模拟
 */
define([
    './mocks/data/menuandcontrl.js'
  ],
  function (require, exports) {
    /* eslint camelcase: 1  */
    /**
     * GET请求URL参数转换
     * @param url
     * @returns {{}}
     */
    var paramUrl2Obj = function (url) {
      var search = url.split('?')[1];
      if (!search) {
        return {};
      }
      return JSON.parse('{"' + decodeURIComponent(search).replace(/"/g, '\\"').replace(/&/g, '","').replace(/=/g, '":"').replace(/\n/g, '\\n') + '"}');
    };

    /**
     * POST请求BODY参数转换
     * @param body
     * @returns {{}}
     */
    var paramBody2Obj = function (body) {
      if (!body) {
        return {};
      }
      return JSON.parse('{"' + decodeURIComponent(body).replace(/"/g, '\\"').replace(/&/g, '","').replace(/=/g, '":"').replace(/\n/g, '\\n') + '"}');
    };

    var frameConfig = {
      menuModel: 'left',
      fontSize: 'large',
      themes: 'default'
    };

    function getParams(str) {
      var s = str.split('&');
      var r = {};
      for (var i = 0, l = s.length; i < l; i++) {
        var tmp = s[i].split('=');
        r[tmp[0]] = tmp[1]
      }
      return r;
    };
    /**
     * oauth认证获取/刷新token
     * @param config
     * @returns {{code: string}}
     */
    exports.loginFn = function (config) {
      var returnObj = {};
      var suffix = new Date().getTime();
      // 获取Token、刷新Token请求成功返回相关token信息
      var tempReturnObj = {
        access_token: 'Basicd2ViX2FwcDo=' + suffix,
        expires_in: 600, // 单位：秒
        refresh_token: 'eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9' + suffix
      };

      try {
        var data = getParams(config.body); // paramBody2Obj(config.body);
        if (data.grant_type == 'refresh_token') {
          // 刷新token请求认证成功，返回相关token信息
          returnObj = tempReturnObj;
          // 此处未模拟refresh_token失效情况，真实情况，请根据真实后端情况判断
        } else {
          if (data.username != 'admin' || data.password != 'admin') {
            // 获取token请求认证失败，返回错误信息
            returnObj = {
              code: '9001',
              message: '用户名或密码错误，请重新输入!'
            };
          } else {
            // 获取token请求认证成功，返回相关token信息
            returnObj = tempReturnObj;
          }
        }
      } catch (e) {
        // 获取token认证请求、刷新token认证请求失败
        returnObj.code = '-1';
        returnObj.message = '系统错误，请联系系统管理员!';
      }
      return returnObj;
    };

    /**
     * 注销模拟
     * @param config
     */
    exports.logoutFn = function (config) {
      return {
        code: 0,
        message: 'logout success!'
      };
    };

    /**
     * 模拟会话信息
     * @param config
     * @returns
     */
    exports.sessionInfoFn = function (config) {
      // var data = paramUrl2Obj(config.url);
      return {
        'userId': '40',
        'userName': 'YUFP',
        'userAvatar': null,
        'loginCode': 'admin',
        'loginTime': null,
        'roles': [{
          'id': '7001',
          'code': 'ADMIN',
          'name': '系统管理员'
        }],
        'dpt': {
          'id': '133',
          'code': '1001',
          'name': '首席运营官'
        },
        'org': {
          'id': '500',
          'code': '500',
          'name': '宇信金融集团'
        },
        'logicSys': {
          'id': '203',
          'code': '',
          'name': '客户关系管理系统'
        },
        'instu': null,
        'upOrg': null,
        'upDpt': null,
        'dataContr': []
      };
    };
    exports.verifyCodeImage = function () {
      console.log('验证码');
      return Mock.Random.image('200x100')
    };
    /**
     * 模拟菜单、控制点数据
     * @returns {{menus, ctrls}}
     */
    exports.menuAndContrFn = function () {
      console.log('菜单数据', window.demoMenus);
      return {
        menu: window.demoMenus,
        contr: window.demoCtrls
      };
    };

    /**
     * 数据权限数据
     */
    exports.dataContrFn = function () {
      return window.demoDataContr;
    };

    /**
     * 密码加密
     */
    exports.passwordFn = function () {

    };

    /**
     * 查询全部控制点信息
     */
    exports.contrUrlFn = function () {
      return {};
    };

    /**
     * 模拟后台数据字典库
     * @type
     * @private
     */
    var allLookup = {
      USER_STATUS: [{
          key: '01',
          value: '正常'
        },
        {
          key: '02',
          value: '冻结'
        },
        {
          key: '03',
          value: '销户'
        }
      ],
      CUST_TYPE: [{
          key: '1',
          value: '零售'
        },
        {
          key: '2',
          value: '公司'
        }
      ],
      IDENT_TYPE: [{
          key: '1',
          value: '居民身份证'
        },
        {
          key: '2',
          value: '居民户口薄'
        },
        {
          key: '3',
          value: '组织机构代码'
        },
        {
          key: '4',
          value: '营业执照代码'
        }
      ],
      NATIONALITY: [{
          key: 'CN',
          value: '中国'
        },
        {
          key: 'US',
          value: '美国'
        },
        {
          key: 'JP',
          value: '日本'
        },
        {
          key: 'EU',
          value: '欧元区'
        }
      ],
      PUBLISH_STATUS: [{
          key: 'published',
          value: '草稿'
        },
        {
          key: 'draft',
          value: '已发布'
        },
        {
          key: 'deleted',
          value: '已删除'
        }
      ],
      BRANCH: [{
        key: 'c1001',
        value: '成都支行'
      }],
      SUBRANCH: [{
          key: 'c100101',
          value: '高新支行'
        },
        {
          key: 'c100102',
          value: '天府三街支行'
        },
        {
          key: 'c100103',
          value: '天府五街支行'
        }
      ],
      EDUCATION_TYPE: [{
          key: '0',
          value: '博士'
        },
        {
          key: '1',
          value: '硕士'
        },
        {
          key: '2',
          value: '本科'
        },
        {
          key: '3',
          value: '大专'
        },
        {
          key: '4',
          value: '高中及以下'
        }
      ]
    };

    /**
     * 模拟后台数据字典
     * @param config
     * @returns {{data: {}}}
     */
    exports.lookupFn = function (config) {
      var param = paramUrl2Obj(config.url);
      var code = param.lookupCodes;
      if (!code) {
        throw new Error('请求参数错误');
      }
      var codeArr = code.split(',');

      var returnObj = {};
      for (var i = 0, len = codeArr.length; i < len; i++) {
        var codeType = codeArr[i];
        returnObj[codeType] = allLookup[codeType] || [];
      }
      return {
        data: returnObj
      };
    };

    /**
     *模拟框架的配置保存
     */
    exports.saveFn = function (config) {
      var param = JSON.parse(config.body);
      return yufp.extend(true, frameConfig, param);
    };

    /**
     *模拟框架的配置查询
     */
    exports.queryFn = function () {
      return frameConfig;
    };
  });